﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using Modelo;

namespace BaseDeDatos
{
    public static class BDUsuario
    {
        private static string coneccion = "Data Source=.\\sqlexpress; Initial Catalog=MercadoSeguridad; Integrated Security=true";
        public static Usuario ObtenerUsuario(string nombreUsuario)
        {
            SqlConnection sql = null;
            Usuario usuario = null;
            try
            {
                sql = new SqlConnection(coneccion);
                SqlCommand comando = sql.CreateCommand();
                comando.CommandText = "SELECT Persona.CI,Nombre,Apellido,Telefono,Celular,Email,Cargo,Imagen,Contrasena,Direccion FROM [Usuario],[Persona] WHERE Usuario =@usuario and Persona.CI=Usuario.CI";
                comando.Parameters.AddWithValue("usuario", nombreUsuario);
                sql.Open();
                SqlDataReader reader = comando.ExecuteReader();
                if (reader.Read())
                {
                    usuario = new Usuario();
                    usuario.Contrasena = reader["Contrasena"].ToString();
                    usuario.Apellido = reader["Apellido"].ToString();
                    usuario.Cargo = reader["Cargo"].ToString();
                    usuario.Celular = reader["Celular"].ToString();
                    usuario.Ci = reader["CI"].ToString();
                    usuario.Direccion = reader["Direccion"].ToString();
                    usuario.Email = reader["Email"].ToString();
                    usuario.Imagen = (byte[])reader["Imagen"];
                    usuario.Nombre = reader["Nombre"].ToString();
                    usuario.Telefono = reader["Telefono"].ToString();
                    usuario.NombreUsuario = nombreUsuario;
                }
            }
            catch (Exception e)
            {

                throw e;
            }
            finally
            {
                if (sql != null)
                    sql.Dispose();
            }
            return usuario;
        }

        public static List<Persona> ObtenerEmpleados()
        {
            SqlConnection sql = null;
            List<Persona> empleados = new List<Persona>();
            try
            {
                sql = new SqlConnection(coneccion);
                SqlCommand comando = sql.CreateCommand();
                comando.CommandText = "SELECT Persona.CI,Nombre,Direccion,Apellido,Telefono,Celular,Email FROM [Persona] ";
                sql.Open();
                SqlDataReader reader = comando.ExecuteReader();
                Persona persona;
                while (reader.Read())
                {
                    persona = new Persona();
                   persona.Apellido = reader["Apellido"].ToString();
                    persona.Celular = reader["Celular"].ToString();
                    persona.Ci = reader["CI"].ToString();
                    persona.Direccion = reader["Direccion"].ToString();
                    persona.Email = reader["Email"].ToString();
                    persona.Nombre = reader["Nombre"].ToString();
                    persona.Telefono = reader["Telefono"].ToString();
                    empleados.Add(persona);
                }
            }
            catch (Exception e)
            {

                throw e;
            }
            finally
            {
                if (sql != null)
                    sql.Dispose();
            }
            return empleados;

        }

        public static void cambiarCargo(string usuario, string cargo)
        {
            SqlConnection sql = null;

            try
            {
                sql = new SqlConnection(coneccion);
                SqlCommand comando = sql.CreateCommand();
                comando.CommandText = "Update [Usuario] Set Cargo=@car Where Usuario=@usuario";
                comando.Parameters.AddWithValue("usuario", usuario);
                comando.Parameters.AddWithValue("car", cargo);

                sql.Open();
                comando.ExecuteNonQuery();

            }
            catch (Exception e)
            {

                throw e;
            }
            finally
            {
                if (sql != null)
                    sql.Dispose();
            }
        
        }
        public static void AlmacenarAContrasenas(string usuario, string contrasena)
        {
            SqlConnection sql = null;

            try
            {
                sql = new SqlConnection(coneccion);
                SqlCommand comando = sql.CreateCommand();
                comando.CommandText = "Insert Into [CambioContrasena] (Usuario,Contrasena) Values(@user,@pass) ";
                comando.Parameters.AddWithValue("user", usuario);
                comando.Parameters.AddWithValue("pass", contrasena);
                sql.Open();
                comando.ExecuteNonQuery();
            }
            catch (Exception e)
            {

                throw e;
            }
            finally
            {
                if (sql != null)
                    sql.Dispose();
            }
        
 
        }
        public static void cambiarContrasena(string usuario, string contrasena,DateTime fechaNueva)
        {
            SqlConnection sql = null;
            
            try
            {
                sql = new SqlConnection(coneccion);
                SqlCommand comando = sql.CreateCommand();
                comando.CommandText = "Update [Usuario] Set Contrasena=@cont,FecUltimoCambio=@fec Where Usuario=@usuario";
                comando.Parameters.AddWithValue("usuario", usuario);
                comando.Parameters.AddWithValue("cont", contrasena);
                comando.Parameters.AddWithValue("fec",fechaNueva);
                sql.Open();
                comando.ExecuteNonQuery();
                AlmacenarAContrasenas(usuario,contrasena);
            }
            catch (Exception e)
            {

                throw e;
            }
            finally
            {
                if (sql != null)
                    sql.Dispose();
            }
        
        }
        public static string ObtenerContrasena(string nombreUsuario)
        {
            SqlConnection sql = null;
            string Contrasena = "";
            try
            {
                sql = new SqlConnection(coneccion);
                SqlCommand comando = sql.CreateCommand();
                comando.CommandText = "SELECT Contrasena FROM Usuario WHERE Usuario =@usuario";
                comando.Parameters.AddWithValue("usuario", nombreUsuario);
                sql.Open();
                SqlDataReader reader = comando.ExecuteReader();
                if (reader.Read())
                {
                    Contrasena = reader["Contrasena"].ToString();
                }
            }
            catch (Exception e)
            {

                throw e;
            }
            finally
            {
                if (sql != null)
                    sql.Dispose();
            }
            return Contrasena;
        }


        public static DateTime ObtenerFechaCambio(Usuario usuario)
        {
            SqlConnection sql = null;            
            try
            {
                DateTime fec=new DateTime();
                sql = new SqlConnection(coneccion);
                SqlCommand comando = sql.CreateCommand();
                comando.CommandText = "SELECT FecUltimoCambio FROM Usuario WHERE Usuario =@usuario";
                comando.Parameters.AddWithValue("usuario",usuario.NombreUsuario);
                sql.Open();
                SqlDataReader reader = comando.ExecuteReader();
                if (reader.Read())
                {
                    fec =DateTime.Parse( reader["FecUltimoCambio"].ToString());
                }
                return fec;
            }
            catch (Exception ex)
            {
                throw ex;
            }           
        }

        public static DateTime GetHoraEntrada(Usuario usuario)
        {
            SqlConnection sql = null;
            try
            {
                DateTime fec = new DateTime();
                sql = new SqlConnection(coneccion);
                SqlCommand comando = sql.CreateCommand();
                comando.CommandText = "SELECT HoraEntrada FROM Usuario WHERE Usuario =@usuario";
                comando.Parameters.AddWithValue("usuario", usuario.NombreUsuario);
                sql.Open();
                SqlDataReader reader = comando.ExecuteReader();
                if (reader.Read())
                {
                    fec = DateTime.Parse(reader["HoraEntrada"].ToString());
                }
                return fec;
            }
            catch (Exception ex)
            {
                throw ex;
            }           
        }

        public static DateTime GetHoraSalida(Usuario usuario)
        {
            SqlConnection sql = null;
            try
            {
                DateTime fec = new DateTime();
                sql = new SqlConnection(coneccion);
                SqlCommand comando = sql.CreateCommand();
                comando.CommandText = "SELECT HoraSalida FROM Usuario WHERE Usuario =@usuario";
                comando.Parameters.AddWithValue("usuario", usuario.NombreUsuario);
                sql.Open();
                SqlDataReader reader = comando.ExecuteReader();
                if (reader.Read())
                {
                    fec = DateTime.Parse(reader["HoraSalida"].ToString());
                }
                return fec;
            }
            catch (Exception ex)
            {
                throw ex;
            }           
        }

        public static bool mismaContrasena(Usuario usuario, string p)
        {
            SqlConnection sql = null;
            try
            {
                bool resp = true;
                sql = new SqlConnection(coneccion);
                SqlCommand comando = sql.CreateCommand();
                comando.CommandText = "SELECT Usuario,Contrasena FROM CambioContrasena WHERE Usuario =@usuario and Contrasena=@contrasena";
                comando.Parameters.AddWithValue("usuario", usuario.NombreUsuario);
                comando.Parameters.AddWithValue("contrasena", p);
                sql.Open();
                SqlDataReader reader = comando.ExecuteReader();
                if (reader.HasRows)
                {
                    resp = false;
                }
                return resp;
            }
            catch (Exception ex)
            {
                throw ex;
            }           
        }
    }
}
